package acciones;

import islenio.IslenioEntornoEstado;
import islenio.IslenioEstado;
import utilidades.Aldea;
import utilidades.Camino;
import frsf.cidisi.faia.agent.search.SearchAction;
import frsf.cidisi.faia.agent.search.SearchBasedAgentState;
import frsf.cidisi.faia.state.AgentState;
import frsf.cidisi.faia.state.EnvironmentState;

public class IrBresol extends SearchAction {
	 public SearchBasedAgentState execute(SearchBasedAgentState s) {
	        IslenioEstado agentState = (IslenioEstado) s;
	        
	        if(Aldea.contiene(agentState.aldeasRecorridas,agentState.Bresol)) return null;
	        if(Camino.hayCamino(agentState.getAldeaActual(),agentState.Bresol,agentState.listaCaminos)){	        	
	        	agentState.actualizarDistanciaRecorrida(agentState.Bresol);
	        	agentState.setAldeaActual(agentState.Bresol);
	        	return agentState;
	        }
	           
	        return null;
	    }

	    public EnvironmentState execute(AgentState ast, EnvironmentState est) {
	        IslenioEstado agentState = (IslenioEstado) ast;
	        IslenioEntornoEstado environmentState = (IslenioEntornoEstado) est;

	        if(Aldea.contiene(IslenioEntornoEstado.aldeasRecorridas,agentState.Bresol)) return null;
	        if(Camino.hayCamino(agentState.getAldeaActual(),agentState.Bresol,agentState.listaCaminos)){	        		
	        	agentState.actualizarDistanciaRecorrida(agentState.Bresol);
	        	agentState.setAldeaActual(agentState.Bresol);
	        	environmentState.setAldeaActual(IslenioEntornoEstado.Bresol);
        		return environmentState;
	        	
	        }
	               
	        return null;
	    }

	    public Double getCost() {
	        return new Double(0);
	    }

	    public String toString() {
	        return "IrBresol";
	    }
}
